package com.ruoyi.warn.service;

import com.ruoyi.common.core.domain.vo.UserInfoVo;
import com.ruoyi.user.domain.UserInfo;
import com.ruoyi.warn.domain.vo.*;

import java.util.List;

/**
 * 智能预警Service接口
 *
 * @author xiaohao
 * @date 2023-02-14
 */
public interface IWarnService {

    /**
     * 风险人员统计
     */
    FxryNumsVo fxryNums();

    /**
     * 风险人员详情列表
     */
    List<FxryDetailVo> fxryDetails();

    /**
     * 社戒社康 - 总人数
     */
    int sjskzrs();

    /**
     * 社戒社康 - 本月新增人数
     *
     * @param date 日期
     */
    int sjskXzrsByMonth(String date);

    /**
     * 社戒社康 - 统计 - 月新增人数
     */
    List<DayStatisticsVo> sjskbyxzrsStatisticsByMonth(String date);

    /**
     * 社戒社康 - 本月新增人数详情
     *
     * @param date 日期
     * @return 人员详情列表
     */
    List<RyDetailVo> sjskXzrsDetailByMonth(String date);

    /**
     * 严重违反协议 - 总人数
     */
    int wfxyzrs();

    /**
     * 严重违反协议 - 本月新增人数
     *
     * @param date 日期
     * @return 某月违反协议新增人数
     */
    int wfxyxzrsByMonth(String date);

    /**
     * 严重违反协议 - 统计 - 本月新增人数
     */
    List<DayStatisticsVo> yzwfxybyxzrsStatisticsByMonth(String date);

    /**
     * 严重违反协议 - 某月新增人员详情列表
     *
     * @param date 日期
     * @return 人员详情列表
     */
    List<RyDetailVo> yzwfxyxzrsDetailByMonth(String date);

    /**
     * 超期未报道人数
     *
     * @param date 日期
     * @return 人数
     */
    Integer cqwbdrsNumsByMonth(String date);

    /**
     * 超期未报道人数 - 统计（日）
     *
     * @param date 日期
     * @return 统计结构
     */
    List<DayStatisticsVo> cqwbdrsStatisticsByMonth(String date);

    /**
     * 超期未报道人员 - 详情列表
     *
     * @param date 日期
     * @return 人员详情列表
     */
    List<RyDetailVo> cqwbdrsDetailByDay(String date);

    /**
     * 强戒出所预警 - 统计（日）
     *
     * @param date 日期
     * @return 统计结构
     */
    List<DayStatisticsVo> qjcsryStatisticsByMonth(String date);

    /**
     * 超期未报道人员 - 人员列表
     *
     * @param date 日期
     * @return 人员详情列表
     */
    List<RyDetailVo> qjcsryDetailByDay(String date);

    /**
     * 吊销驾照人数统计
     */
    List<JszsfdxStatisticsVo> jszsfdxStatistics();

    /**
     * 未吊销驾照人员 - 详情列表
     */
    List<RyDetailVo> jszsfdxWdxryDetail();

    /**
     * 签到预警人数统计
     */
    List<QdyjStatisticsVo> qdyjStatistics();

    /**
     * 签到预警人员 - 详情列表
     */
    List<RyDetailVo> qdyjDetail();

    /**
     * 提前15天预警未尿检人数
     */
    Integer njyjNum();

    /**
     * 提前15天预警未尿检人员信息列表
     */
    List<RyDetailVo> njyjDetail(String type);

    /**
     * 家访预警人数统计
     */
    List<JfyjStatisticsVo> jfyjStatistics();

    /**
     * 签到预警人员 - 详情列表
     */
    List<RyDetailVo> jfyjDetail();

    /**
     * 毛发检测预警人数统计
     */
    Integer mftjNum();

    /**
     * 毛发检测预警人员 - 详情列表
     */
    List<RyDetailVo> mftjDetail();

    /**
     * 帮扶预警 - 人数统计
     */
    BfyjStatisticsVo bfyjStatistics();

    /**
     * 帮扶预警 - 详情列表
     */
    List<RyDetailVo> bfyjDetail();

    /**
     * 房屋踏查预警 - 超期数量统计
     */
    Integer fwtcyjNum();

    /**
     * 房屋踏查预警 - 详情列表
     */
    List<FwTcDetailVo> fwtcyjDetail(String type, String mode);

    /**
     * 工作日志 - 各类型数量统计
     * @param memberId 工作人员id
     */
    GzrzNumsVo gzrzNums(Long memberId);

    /**
     * 工作日志 - 超期未报道列表
     * @param memberId 工作人员id
     */
    List<UserInfoVo> gzrzCqwbdrList(Long memberId);

    /**
     * 工作日志 - 本期未尿检数列表
     * @param memberId 工作人员id
     */
    List<UserInfoVo> gzrzBqwnjList(Long memberId);

    /**
     * 工作日志 - 外出人员列表
     * @param memberId 工作人员id
     */
    List<UserInfoVo> gzrzWcryList(Long memberId);

    /**
     * 工作日志 - 本月普通违反协议列表
     * @param memberId 会员id
     */
    List<UserInfoVo> gzrzByptwfxyList(Long memberId);

    /**
     * 工作日志 - 本月严重违反协议列表
     * @param memberId 会员id
     */
    List<UserInfoVo> gzrzByYzwfxyList(Long memberId);

    /**
     * 本期未尿检人员列表
     */
    List<RyDetailVo> getBqwnjList();

    /**
     * 本期已尿检人员列表
     */
    List<RyDetailVo> getBqynjList();

    List<RyDetailVo> getBqwnjListByUsers(List<UserInfo> sjsks);
}
